//
//  GBInterMaster_CommForSystem.h
//  NetworkTest
//
//  Created by xiaosi on 16/8/4.
//  Copyright © 2016年 xiaosi. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "GBInterMaster_LogicLauncher.h"

static const int SYSTEM_VERSIONS = 10; //APP版本
static const int SYSTEM_TYPE = 30003; //APP类型 1：环都7寸老版ANDROID 2：中惠ANDROID 3：桑普ANDROID 4：泰豪ANDROID 5：环都新版ANDROID
static const int SEND_MSG_OVER_TIME = 6;// 发送数据超时时间
static const int REFRESH_OVER_TIME = 5000;// 操作超时时间
static const NSString* HOST_ADDRESS = @"cloud.sampux.com";//服务器地址
static const int HOST_PORT = 63301;//服务器端口
static const int DATA_VERSION = 0x01;//数据协议版本


static const NSString* NOTIFICATION_RESPONSE_APP_REGISTER= @"com.gaobiaoiot.intermaster.response.app.register";

static const NSString* NOTIFICATION_RESPONSE_REGISTER_VEGISTER= @"com.gaobiaoiot.intermaster.response.userregister.vegister";

static const NSString* NOTIFICATION_RESPONSE_REGISTER= @"com.gaobiaoiot.intermaster.response.userregister";

static const NSString* NOTIFICATION_RESPONSE_FORGETPWD_VEGISTER= @"com.gaobiaoiot.intermaster.response.forgetpassword.vegister";

static const NSString* NOTIFICATION_RESPONSE_FORGETPWD_VERIFY= @"com.gaobiaoiot.intermaster.response.forgetpassword.verify";

static const NSString* NOTIFICATION_RESPONSE_FORGETPWD_NEWPWD= @"com.gaobiaoiot.intermaster.response.forgetpassword.newpwd";

static const NSString* NOTIFICATION_RESPONSE_LOGIN= @"com.gaobiaoiot.intermaster.response.userlogin";

static const NSString* NOTIFICATION_RESPONSE_UPDATEPWD= @"com.gaobiaoiot.intermaster.response.updatepassword";

static const NSString* NOTIFICATION_RESPONSE_POSSESSOR= @"com.gaobiaoiot.intermaster.response.possessor";

static const NSString* NOTIFICATION_RESPONSE_DEVICE_RENAME= @"com.gaobiaoiot.intermaster.response.device.rename";

static const NSString* NOTIFICATION_RESPONSE_GET_DEVICE_LIST= @"com.gaobiaoiot.intermaster.response.get.device.list";

static const NSString* NOTIFICATION_RESPONSE_GET_DEVICE_USERS_LIST= @"com.gaobiaoiot.intermaster.response.get.device.users.list";

static const NSString* NOTIFICATION_RESPONSE_RELIEVE_DEVICE= @"com.gaobiaoiot.intermaster.response.relieve.device";

static const NSString* NOTIFICATION_RESPONSE_ADD_DEVICE_USER= @"com.gaobiaoiot.intermaster.response.add.device.user";

static const NSString* NOTIFICATION_RESPONSE_DELETE_DEVICE_USER= @"com.gaobiaoiot.intermaster.response.delete.device.user";

static const NSString* NOTIFICATION_RESPONSE_EDIT_DEVICE_USER= @"com.gaobiaoiot.intermaster.response.edit.device.user";

static const NSString* NOTIFICATION_RESPONSE_CHANGE_DEVICE_OWN= @"com.gaobiaoiot.intermaster.response.edit.device.user";

static const NSString* NOTIFICATION_RESPONSE_DEVICE_CONFIG= @"com.gaobiaoiot.intermaster.response.device.config";

static const NSString* NOTIFICATION_RESPONSE_MSG_RECEIVE_MODE= @"com.gaobiaoiot.intermaster.response.msg.receive.mode";

@interface GBInterMaster_CommForSystem : NSObject

/**
 *APP连接注册反馈
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_APP_REGISTER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见。
 * key @"version"代表当前版本号，用此版本号对比  SYSTEM_VERSIONS 如不相等则更新。
 */



/* 
 *用户注册（获取验证码）
 *@param msgNumber：消息序号。
 *@param account：用户账号（邮箱或者手机号）。
 */
+ (void) requestUserRegisterVegister:(int)msgNumber withAccount:(NSString*)account;
/*用户注册反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_REGISTER_VEGISTER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见
 *
 *例如：
 *监听通知：
 
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestReceive:) name:NOTIFICATION_RESPONSE_REGISTER_VEGISTER object:nil];
 
 *
 *处理通知：
 *
 
 - (void )requestReceive:(NSNotification* )notification{
 id userInfo = [notification userInfo];
 if(userInfo == nil){
 return;
 }
 NSDictionary * result = userInfo;
 int msgNumber = [[result objectForKey:@"msgNumber"] intValue];
 int responseCode = [[result objectForKey:@"responseCode"] intValue];
 NSLog(@"注册结果，消息序号：%d，响应码：%d",msgNumber,responseCode);
 }
 
 */




/*
 *用户注册
 *@param msgNumber：消息序号。
 *@param password：用户密码
 *@param checkCode：手机或者邮箱接收到的验证码（6位）
 */
+ (void) requestUserRegister:(int)msgNumber withPassword:(NSString*)password withCheckCode:(NSString*)checkCode;
/*用户注册反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_REGISTER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见
 *
 */




/*
 *忘记密码（获取校验码）
 *@param msgNumber：消息序号。
 *@param account：用户账号（邮箱或者手机号）。
 */
+ (void) requestUserForgetPwdVegister:(int)msgNumber withAccount:(NSString*)account;
/*忘记密码（获取校验码）反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_FORGETPWD_VEGISTER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见,当响应码为0x00时，代表服务器正常向用户发送短信了。可进入输入验证界面
 *
 */



/*
 *忘记密码（验证校验码）
 *@param msgNumber：消息序号。
 *@param checkCode：邮箱或者手机接收到的6位验证码。
 */
+ (void) requestUserForgetPwdVerify:(int)msgNumber withCheckCode:(NSString*)checkCode;
/*忘记密码（验证校验码）反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_FORGETPWD_VERIFY
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表校验通过，可进入设置新密码界面
 *
 */



/*
 *忘记密码（设置新密码）
 *@param msgNumber：消息序号。
 *@param password：用户新密码。
 */
+ (void) requestUserForgetPwdNewPwd:(int)msgNumber withPassword:(NSString*)password;
/*忘记密码（设置新密码）反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_FORGETPWD_NEWPWD
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表设置新密码成功
 *
 */



/*
 *用户登录
 *@param msgNumber：消息序号。
 *@param account：用户账号（邮箱或者手机号）。
 *@param password：用户密码。
 *@param checkCode：验证码，登录失败三次后服务器会返给app6个字节的验证码，此时app应该显示验证码以及供用户输入验证码的文本框。
 */
+ (void) requestUserLogin:(int)msgNumber withAccount:(NSString*)account withPassword:(NSString*)password withCheckCode:(NSString*)checkCode;
/*用户登录 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_LOGIN
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表登录成功。如响应码非0，检查key @"isCheck" 的值，如果为0x01，则需要验证，此时key @"checkCode" 值为服务器提供的6位验证码，供用户输入对比。
 *
 */


/*
 *修改密码
 *@param msgNumber：消息序号。
 *@param oldPassword：用户当前密码。
 *@param newPassword：用户新密码。
 */
+ (void) requestUserUpdatePwd:(int)msgNumber withOldPassword:(NSString*)oldPassword withNewPassword:(NSString*)newPassword;
/*修改密码 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_UPDATEPWD
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表修改密码成功
 *
 */



/*
 *所有者认证（绑定设备）
 *@param msgNumber：消息序号。
 *@param deviceKey：设备wifi模块交互时wifi给的设备32字节key。
 */
+ (void) requestAcceptPossessor:(int)msgNumber withDeviceKey:(NSString*)deviceKey;
/*所有者认证（绑定设备）反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_POSSESSOR
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表绑定成功
 *
 */



/*
 *修改设备名字
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param deviceName：修改的名字。
 */
+ (void) requestDeviceRename:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withDeviceName:(NSString*)deviceName;
/*修改设备名字 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_DEVICE_RENAME
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表修改设备名字成功
    @"deviceAlias" 代表修改的名字
 *
 */



/*
 *获取设备列表
 *@param msgNumber：消息序号。
 */
+ (void) requestDeviceList:(int)msgNumber;
/*获取设备列表 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_GET_DEVICE_LIST
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，key @"devices"为设备列表数据（类型为：NSMutableArray）获取里面的元素时先装换成GBInterMaster_Bean_DeviceInfo 根据deviceType字段判断设备类型，再装换成相应的实体类。
 *
 */

/*
 *获取设备使用者列表
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 */
+ (void) requestDeviceUserList:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount;
/*获取设备使用者列表 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_GET_DEVICE_USERS_LIST
 *回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，key @"operators"为使用者列表（类型为：NSMutableArray，元素类型为：GBInterMaster_Bean_DeviceOperatorInfo）
 *
 */


/*
 *解除绑定
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。 当此操作为所有者时，同时此设备的使用者也将被解除
 */
+ (void) requestRelieveDevice:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount;
/*解除绑定 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_RELIEVE_DEVICE
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表解绑成功
 *
 */


/*
 *添加使用者
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param userAccount：使用者的账号。
 *@param userAlias：使用者别名。
 */
+ (void) requestAddDeviceUser:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withUserAccount:(NSString*)userAccount withUserAlias:(NSString*)userAlias;
/*添加使用者 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_ADD_DEVICE_USER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表添加成功
 *
 */



/*
 *删除使用者
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param userAccount：使用者的账号。
 */
+ (void) requestDeleteDeviceUser:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withUserAccount:(NSString*)userAccount;
/*删除使用者 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_DELETE_DEVICE_USER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表删除成功
 *
 */


/*
 *编辑使用者
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param userAccount：使用者的账号。
 *@param userAlias：使用者别名。
 */
+ (void) requestEditDeviceUser:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withUserAccount:(NSString*)userAccount withUserAlias:(NSString*)userAlias;
/*添加使用者 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_EDIT_DEVICE_USER
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表编辑使用者成功
 *
 */


/*
 *所有者转移
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param userAccount：转移到此账号。
 */
+ (void) requestDeviceOwnChange:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withUserAccount:(NSString*)userAccount;
/*所有者转移 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_CHANGE_DEVICE_OWN
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表转移成功
 *
 */



/* 
 *获取设备配置
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 */
+ (void) requestDeviceConfig:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount;
/*获取设备配置 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_DEVICE_CONFIG
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，其他属性有值，属性如下：
 *============桑普GM8===================================
 *key @“deviceAccount” NSString类型  设备的序号
 *key @“isDataSyn” int类型 1：同步 其他：不同步
 *key @“ownAccount”  NSSring类型 此设备的所有者用户名
 *key @“isPossessor” int类型 1：代表当前用户为所有者  其他：代表当前用户为使用者
 *key @“alias” NSString类型  此设备的别名
 *======================================================
 */



/* 
 *消息同步设置
 *@param msgNumber：消息序号。
 *@param deviceAccount：设备16位序列号。
 *@param msgMod：消息同步模式 1：同步 其他：不同步
 */
+ (void) requestMsgReceiveMode:(int)msgNumber withDeviceAccount:(NSString*)deviceAccount withMsgMode:(int)msgMod;
/*消息同步设置 反馈：
 *
 *需要接收结果的界面监听通知：NOTIFICATION_RESPONSE_MSG_RECEIVE_MODE
 * 回调方法中参数[notification userInfo] 中 key @“msgNumber” 代表消息序号， key @"responseCode" 代表响应码，响应码具体详细见，当响应码为0x00时，代表转移成功
 *
 */

@end
